home *** CD-ROM | disk | FTP | other *** search
/ Network CD 2 / Network CD - Volume 2.iso / programs / internet / tcp / chat / irchat24.lha / irchat24 / irchat.lha / elisp / irchat / irchat-dcc.el < prev    next >
Encoding:
Text File  |  1994-03-16  |  3.6 KB  |  115 lines

  1. ;;;
  2. ;;; $Id: irchat-dcc.el,v 1.1 1994/02/23 15:05:00 tmo Exp $
  3. ;;;
  4. ;;; see file irchat-copyright.el for change log and copyright info
  5. ;;;
  6. ;;; This file:
  7. ;;; Copyright 1994 Kim Nyberg <kny@tekla.fi>
  8. ;;; All Rights Reserved
  9.  
  10.  
  11. (defvar irchat-dcc-receive-list nil)
  12. (defvar irchat-dcc-receive-direct nil)
  13.  
  14.  
  15. (defun irchat-ctl-a-dcc-msg (from rest)
  16.   (insert (format "*** DCC from %s: %s\n" from rest))
  17.   (if (string-match 
  18.        "\\(SEND\\) \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\)" rest)
  19.       (let ((command "receive")
  20.         (filename (matching-substring rest 2))
  21.         (host (matching-substring rest 3))
  22.         (port (matching-substring rest 4))
  23.         (size (matching-substring rest 5)))
  24.     (setq irchat-dcc-receive-list
  25.           (append irchat-dcc-receive-list
  26.               (list (list command host port size filename))))
  27.     (if irchat-dcc-receive-direct
  28.         (irchat-Command-dcc-receive)))))
  29.  
  30.  
  31. (defun irchat-Command-dcc-send ()
  32.   "Send file to user."
  33.   (interactive)
  34.   (let ((filename (expand-file-name (read-file-name
  35.                      "File to send: "
  36.                      default-directory nil))))
  37.     (setq irchat-privmsg-partner
  38.     (irchat-completing-default-read 
  39.      "To whom: "
  40.      (append irchat-nick-alist irchat-channel-alist)
  41.      '(lambda (s) t) 
  42.      nil irchat-privmsg-partner))
  43.     (set-process-filter
  44.      (start-process irchat-dcc-program nil 
  45.             irchat-dcc-program "send" 
  46.             (int-to-string irchat-dcc-port)
  47.             filename)
  48.      'irchat-dcc-send-filter)
  49.     (setq irchat-dcc-port (1+ irchat-dcc-port))))
  50.  
  51.  
  52. (defun irchat-dcc-send-filter (process output)
  53.   (cond ((string-match "DCC file [^ ]* sent" output)
  54.      (irchat-own-message (substring output 0 (1- (length output))))
  55.      (message ""))
  56.     ((string-match 
  57.       "DCC send [^ ]*/\\([^ ]*\\) \\([^ ]+\\) \\([^ ]+\\) \\(.+\\)" output)
  58.      (let ((filename (matching-substring output 1))
  59.            (port (matching-substring output 2))
  60.            (machine (matching-substring output 3))
  61.            (size (matching-substring output 4)))
  62.        (irchat-send "PRIVMSG %s :DCC SEND %s %s %s %s %s"
  63.             irchat-privmsg-partner filename machine port size)
  64.        (irchat-own-message
  65.         (format "*** Sending file %s (%s bytes) to %s"
  66.             filename size irchat-privmsg-partner))))
  67.     ((string-match "ERROR.*" output)
  68.      (irchat-own-message (format "*** DCC %s" output)))
  69. ))
  70.  
  71.  
  72. (defun irchat-Command-dcc-receive (&optional number)
  73.   "Receive next file from list."
  74.   (interactive "P")
  75.   (let ((dcc-object (car irchat-dcc-receive-list)))
  76.     (setq irchat-dcc-receive-list (cdr irchat-dcc-receive-list))
  77.     (if dcc-object
  78.     (let ((command (car dcc-object))
  79.           (host (nth 1 dcc-object))
  80.           (port (nth 2 dcc-object))
  81.           (size (nth 3 dcc-object))
  82.           (default (nth 4 dcc-object)))
  83.       (irchat-own-message
  84.        (format "*** Getting file %s (%s bytes)" default size))
  85.       (let ((filename (expand-file-name default irchat-dcc-directory)))
  86.         (set-process-filter
  87.          (start-process irchat-dcc-program nil irchat-dcc-program 
  88.                 command host port size filename)
  89.          'irchat-dcc-receive-filter))))))
  90.  
  91.  
  92. (defun irchat-dcc-receive-filter (process output)
  93.   (if (string-match "DCC file [^ ]* received" output)
  94.       (irchat-own-message (substring output 0 (1- (length output))))
  95.     (message "%s" (substring output 0 (1- (length output))))))
  96.  
  97.  
  98. (defun irchat-Command-dcc-list ()
  99.   "List files in receive queue."
  100.   (interactive)
  101.   (let* ((dcc-list irchat-dcc-receive-list)
  102.      dcc-object)
  103.     (while dcc-list
  104.       (setq dcc-object (car dcc-list)
  105.         dcc-list (cdr dcc-list))
  106.       (let ((filename (cdr (cdr (cdr (cdr dcc-object)))))
  107.         (size (car (cdr (cdr (cdr dcc-object))))))
  108.     (irchat-own-message
  109.      (format "*** DCC file %s (%s bytes)" filename size))))))
  110.  
  111. (provide 'irchat-dcc)
  112. ;;;
  113. ;;; eof
  114. ;;;
  115.